package common

import (
	"backend/config"
	"context"
	"fmt"
	"log"
	"time"

	"github.com/redis/go-redis/v9"
)

var RedisClient *redis.Client

func InitRedis() (*redis.Client, error) {
	RedisClient = redis.NewClient(&redis.Options{
		Addr:     fmt.Sprintf("%s:%d", config.Configs.Redis.Host, config.Configs.Redis.Port),
		Password: config.Configs.Redis.Password,
		DB:       config.Configs.Redis.DB,
	})

	// 测试连接
	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()
	if _, err := RedisClient.Ping(ctx).Result(); err != nil {
		return nil, fmt.Errorf("Redis连接失败: %v", err)
	}

	return RedisClient, nil
}

// GetRedis 获取Redis客户端
func GetRedis() *redis.Client {
	if RedisClient == nil {
		log.Fatal("Redis客户端未初始化")
	}
	return RedisClient
}

func CloseRedis() error {
	if RedisClient != nil {
		return RedisClient.Close()
	}
	return nil
}
